package com.gz.spring.component;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import javax.annotation.Resource;
import java.lang.reflect.Type;

/**
 * Controller表示该类是一个控制器Controller，通常该类是一个Servlet
 */
//@Controller(value = "gz2")
@Controller
public class UserAction {
    //1.在ioc容器中查找待装配的组件类型，如果有唯一的bean匹配(按照类型)，则使用bean装配
    //当配置文件xml中只有一个UserService时，这里的userService不管是命名为userService200，
    //还是userService400，都与ioc.getBean("userAction",UserAction.class);中获取的是同一个

    //2.若待装配的类型对应的bean在ioc容器中有多个，则使用待装配的属性名作为id值进行查找
    //自动装配,现在不推荐用这个，而用Resource
    //@Autowired
    //@Qualifier(value="userService200")
    //private UserService userService;
    //如果用Autowire，一般配合@Qualifier(value="userService200")使用

    //1.@Resource有两个重要属性，name和type
    //2.如果用@Resource(type = UserService.class),那么前提是只能有一个UserService在配置文件xml中
    //3.当用@Resource(type = UserService.class)时，userService不管是命名为userService200，
    //还是userService400，都与ioc.getBean("userAction",UserAction.class);中获取的是同一个
    //4.当只有@Resource时，默认按照自己定的名字来匹配，分三种情况
    //(1)匹配名字
    //(2)若名字匹配不上，匹配type
    //(3)若名字和type都匹配不上:(1)若xml文件只有一个UserService，则匹配默认的
                           //(2)若xml文件中有多个UserService，则报错

//    @Resource(name = "userService200"
    @Resource
    private UserService userService;
    //Autowire(不推荐)和Resource两个注解方式，现在一般都用Resource

    public void sayOk(){
        System.out.println("UserAction的sayOk()");
        System.out.println("UserAction中装配的UserService="+userService);
        userService.sayHello();
    }
}
